//---------------------------------------------------------------------
// File: XPathValidator.cs
// 
// Summary: 
//
// Copyright (c) Hammersmith & Fulham Bridge Partnership. All rights reserved.
//
// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
// PURPOSE.
//---------------------------------------------------------------------

using System;
using System.Xml.XPath;
using System.Xml;

namespace BizUnit.Extensions.Utilities
{
	/// <summary>
	/// A utility class which applies XPath expressions to xml files and returns the value
	/// in a variety of data types
	/// </summary>
	public class XPathValidator
	{
		/// <summary>
		/// basic constructor
		/// </summary>
		public XPathValidator()
		{
			//
			// TODO: Add constructor logic here
			//
		}
		/// <summary>
		/// Evaluates the XPath expression and returns a string value
		/// </summary>
		/// <param name="InputXmlFile">full path of the xml file to parse</param>
		/// <param name="XPathString">XPath expression to apply</param>
		/// <returns>string</returns>
		public string GetStringValue(string InputXmlFile,string XPathString)
		{
			string retval ;
			object obj = MakeXPathExpression(InputXmlFile,XPathString);
			retval = (string)obj;
			return(retval);
		}

		/// <summary>
		/// Evaluates the XPath expression and returns a integer value
		/// </summary>
		/// <param name="InputXmlFile">full path of the xml file to parse</param>
		/// <param name="XPathString">XPath expression to apply</param>
		/// <returns>int</returns>
		public int GetIntegerValue(string InputXmlFile,string XPathString)
		{
			int retval ;
			object obj = MakeXPathExpression(InputXmlFile,XPathString);
			retval = System.Convert.ToInt32(obj);
			return(retval);
		}

		/// <summary>
		/// Evaluates the XPath expression and returns a bool value
		/// </summary>
		/// <param name="InputXmlFile">full path of the xml file to parse</param>
		/// <param name="XPathString">XPath expression to apply</param>
		/// <returns>bool</returns>
		public bool GetBooleanValue(string InputXmlFile,string XPathString)
		{
			bool retval ;
			object obj = MakeXPathExpression(InputXmlFile,XPathString);
			retval = System.Convert.ToBoolean(obj);
			return(retval);
		}
		private object MakeXPathExpression(string inputXmlFile,string XPathString)
		{
			
			XmlDocument xDoc = new XmlDocument();
			xDoc.Load(inputXmlFile);
			XPathNavigator nav = xDoc.CreateNavigator();
			XPathExpression expr = nav.Compile( XPathString);

			return(nav.Evaluate(expr));
		}
	}
}
